//package com.joven.suven.base.core.expire;
//
//import java.util.Map;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
//
//import org.aspectj.lang.JoinPoint;
//import org.aspectj.lang.annotation.AfterReturning;
//import org.aspectj.lang.annotation.Aspect;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import com.google.common.collect.Maps;
//import com.joven.suven.base.core.redis.RedisClusterServer;
///**
// * 采用后置通知处理cache expire.
// * 声明ExpireAdvice为切面.
// * @author summerao
// *
// */
//@Aspect
//@Component
//public class ExpireAdvice{
//	@Autowired
//	private RedisClusterServer redisClient;
//	
//	
//	private Logger logger = LoggerFactory.getLogger(getClass());
//	
//	@AfterReturning("within(com.kugou.core.redis..*) && @annotation(ex)")
//	public void redisReturnDealExpire(JoinPoint pjp,ExSign ex){
//		Object target = pjp.getTarget();
//		if(checkPiepleInstance(target)){
//			piepleDealExpire(pjp);
//			return;
//		}
//		Object[] args= pjp.getArgs();
//		String expireKey = args[0].toString();
//		int expireTime = ExpireDeal.get(dealKeyStr(new String(expireKey)));
//		if(expireTime ==0){
//			return ;
//		}
//		redisClient.expire(expireKey, expireTime);
//		logger.info("redis key autowired start expire. key:{},expireAt:{}",expireKey,expireTime);
//		
//	}
//	private String dealKeyStr(String key){
//		Pattern pattern = Pattern.compile("\\d+$");
//		Matcher matcher = pattern.matcher(key);
//		if(matcher.find()){
//			return key.substring(0, key.lastIndexOf(":")+1);
//		}
//		return key;
//	}
//	
//	/**
//	 * 批量处理key expire.主要是为了应对RedisTrans.multiSetAndZSet批量回写.
//	 */
//	private void piepleDealExpire(JoinPoint pjp){
//		Object[] args = pjp.getArgs();
//		Map<String,Integer> expireMap = Maps.newHashMap();
//		for(Object obj:args){
//			if(!(obj instanceof Map)){
//				continue;
//			}
//			Map map = (Map) obj;
//			if(map!=null && map.size()>0){
//				for(Object key :map.keySet()){
//					String expireKey = String.valueOf(key);
//					int expireTime = ExpireDeal.get(dealKeyStr(new String(expireKey)));
//					if(expireTime>0){
//						expireMap.put(expireKey, expireTime);
//					}
//				}
//			}
//		}
//		if(expireMap.size()==0){
//			return;
//		}
//		redisClient..piepleDealExpire(expireMap);
//		logger.warn("redisTrans pieple autowired start expire. expireMap:{}",expireMap);
//	}
//	
//	
//}
